如何在Java中扩展工厂方法模式中的类
我是设计模式方面的新手,现在我正在学习工厂方法模式。我试着用动物做个例子
我有一个动物界面,有两种方法,呼吸和行走。实现这个接口我有两个类,Giraffe和Flamingo
按照这种模式,我有两个工厂,一个是长颈鹿工厂,一个是火烈鸟工厂,还有一个主要的分类如下:
if (color.equals("yellow")) {
factory = new GiraffeFactory();
} else {
factory = new FlamingoFactory();
}
Animal animal = factory.createAnimal();
animal.breathe();
animal.walk();
这非常有效,但现在我意识到火烈鸟能飞。我不想在动物界面中使用这种方法,因为长颈鹿不能
我怎样才能在Flamingo动物的实例中调用这个新方法?cast是唯一的解决方案吗?或者,这种模式仅适用于从接口具有相同方法的对象
((Flamingo) animal).fly();
非常感谢
# 1 楼答案
可以使用泛型使用s工厂方法。这里有几个很好的例子
我建议你阅读所有这些,以便更好地理解问题和可能的解决方法
# 2 楼答案
您可以创建另一个名为WingedAnimal的接口来扩展Animal
然后在创建Flamingo实例时编写以下代码:
你的密码动物。fly()将非常有效
# 3 楼答案
这个模式的使用没有多大意义,关键是你不知道你会得到什么样的动物实现(责任分离),所以使用这些知识是完全反模式的。你可以制作一个新的界面,让Flamingo实现它。然后你可以随时查看。记住,蝙蝠在想到名字时也会飞;)